package gestionReservas;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Date;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

@WebService()
public class AdministradorTrenes {

    /**
     * Web service operation
     */
    @WebMethod(operationName = "addTrayecto")
    public boolean addTrayecto(@WebParam(name = "codigoTren") String codigoTren, @WebParam(name = "origen") String origen, @WebParam(name = "destino") String destino, @WebParam(name = "plazasNormales") int plazasNormales, @WebParam(name = "plazasWeb") int plazasWeb, @WebParam(name = "precioNormal") int precioNormal, @WebParam(name = "precioWeb") int precioWeb, @WebParam(name = "hora") String hora, @WebParam(name = "fecha") long fecha, @WebParam(name = "fechaFin") long fechaFin) {
        try {
            String sDriver = "org.apache.derby.jdbc.ClientDriver";
            String sURL = "jdbc:derby://localhost:1527/BDTrenes";
            Connection con;

            Class.forName(sDriver).newInstance();
            con = DriverManager.getConnection(sURL, "admin", "adminadmin");

            boolean addMultipleOn = false;
            if (fechaFin != 0) {
                addMultipleOn = true;
            }

            do {
                PreparedStatement consulta = con.prepareStatement("SELECT CODTRAYECTO FROM TRAYECTOS ORDER BY CODTRAYECTO DESC");
                ResultSet clave = consulta.executeQuery();
                int cod = 0;
                if (clave.next() != false) {
                    cod = clave.getInt(1) + 1;
                }

                PreparedStatement stmt;
                stmt = con.prepareStatement("INSERT INTO TRAYECTOS VALUES (?,?,?,?,?,?,?,?,?,?)");
                stmt.setInt(1, cod);
                stmt.setString(2, codigoTren);
                stmt.setString(3, origen);
                stmt.setString(4, destino);
                stmt.setInt(5, plazasNormales);
                stmt.setInt(6, plazasWeb);
                stmt.setInt(7, precioNormal);
                stmt.setInt(8, precioWeb);
                stmt.setDate(9, new Date(fecha));
                stmt.setString(10, hora);
                stmt.executeUpdate();

                fecha = fecha + (24 * 60 * 60 * 1000);
            } while (addMultipleOn && (fecha <= fechaFin));

            con.close();

            return true;
        } catch (java.sql.SQLSyntaxErrorException c) {
            System.out.println(c.getMessage());
            return false;
        } catch (java.lang.NumberFormatException n) {
            return false;
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return false;
        }

    }

//    /**
//     * Web service operation
//     */
    @WebMethod(operationName = "borrarPasados")
    public int borrarPasados(@WebParam(name = "fecha") long fecha, @WebParam(name = "borrado") boolean borrado) {
        try {
            String sDriver = "org.apache.derby.jdbc.ClientDriver";
            String sURL = "jdbc:derby://localhost:1527/BDTrenes";
            Connection con;

            Class.forName(sDriver).newInstance();
            con = DriverManager.getConnection(sURL, "admin", "adminadmin");

            PreparedStatement stmt;
            java.sql.Date date=new java.sql.Date(fecha);
            if(!borrado){
                stmt=con.prepareStatement("SELECT COUNT(*) FROM TRAYECTOS WHERE FECHA<'"+date+"'");
                ResultSet resul=stmt.executeQuery();
                resul.next();
                int num=resul.getInt(1);
                return num;
            }
            else{
                stmt=con.prepareStatement("DELETE FROM TRAYECTOS WHERE FECHA<'"+date+"'");
                stmt.executeUpdate();
                return -1;
            }
            
        } catch (Exception e){
            System.out.println(e.getMessage());
            return -2;
        }
    }
//
//    /**
//     * Web service operation
//     */

    @WebMethod(operationName = "mostrarTrayectos")
    public java.util.List<TrayectoClase> mostrarTrayectos(@WebParam(name = "origen") String origen, @WebParam(name = "destino") String destino, @WebParam(name = "codigoTren") String codigoTren, @WebParam(name = "fecha") long fecha) {
        try {
            String sDriver = "org.apache.derby.jdbc.ClientDriver";
            String sURL = "jdbc:derby://localhost:1527/BDTrenes";
            Connection con;

            Class.forName(sDriver).newInstance();
            con = DriverManager.getConnection(sURL, "admin", "adminadmin");

            PreparedStatement stmt;
            ResultSet resul;
            if (!codigoTren.equals("")) {
                stmt = con.prepareStatement("SELECT * FROM TRAYECTOS WHERE CODTREN='" + codigoTren+"'");
                resul = stmt.executeQuery();
            } else {
                String opcion = new String("");
                if (!origen.equals("")) {
                    opcion = opcion.concat("1");
                } else {
                    opcion = opcion.concat("0");
                }
                if (!destino.equals("")) {
                    opcion = opcion.concat("1");
                } else {
                    opcion = opcion.concat("0");
                }
                if (fecha != 0) {
                    opcion = opcion.concat("1");
                } else {
                    opcion = opcion.concat("0");
                }

                System.out.println(opcion);

                java.sql.Date date = new java.sql.Date(fecha);
                int op = Integer.parseInt(opcion);

                switch (op) {
                    case 0:
                        stmt = con.prepareStatement("SELECT * FROM TRAYECTOS");
                        break;
                    case 1:
                        stmt = con.prepareStatement("SELECT * FROM TRAYECTOS WHERE FECHA='" + date+"'");
                        break;
                    case 10:
                        stmt = con.prepareStatement("SELECT * FROM TRAYECTOS WHERE DESTINO='" + destino+"'");
                        break;
                    case 11:
                        stmt = con.prepareStatement("SELECT * FROM TRAYECTOS WHERE DESTINO='" + destino + "' AND FECHA='" + date+"'");
                        break;
                    case 100:
                        stmt = con.prepareStatement("SELECT * FROM TRAYECTOS WHERE ORIGEN='" + origen+"'");
                        break;
                    case 101:
                        stmt = con.prepareStatement("SELECT * FROM TRAYECTOS WHERE ORIGEN='" + origen +"' AND FECHA='" + date+"'");
                        break;
                    case 110:
                        stmt = con.prepareStatement("SELECT * FROM TRAYECTOS WHERE ORIGEN='" + origen +"' AND DESTINO='" + destino+"'");
                        break;
                    case 111:
                        stmt = con.prepareStatement("SELECT * FROM TRAYECTOS WHERE ORIGEN='" + origen + "' AND DESTINO='" + destino + "' AND FECHA='" + date+"'");
                        break;
                    default:
                        stmt=con.prepareStatement("");
                        break;
                }
                resul = stmt.executeQuery();                
            }            
        
            java.util.List<TrayectoClase> trays = new java.util.ArrayList<TrayectoClase>();
            while (resul.next()) {
                TrayectoClase t=new TrayectoClase();
                t.setCodTrayecto(resul.getInt(1));
                t.setCodTren(resul.getString(2));
                t.setOrigen(resul.getString(3));
                t.setDestino(resul.getString(4));
                t.setPlazasNormales(resul.getInt(5));
                t.setPlazasWeb(resul.getInt(6));
                t.setPrecioNormal(resul.getFloat(7));
                t.setPrecioWeb(resul.getFloat(8));
                t.setFecha(resul.getString(9));
                t.setHora(resul.getString(10));
                trays.add(t);
            }
            con.close();
            return trays;
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return null;
        }
        
    }
//
//    /**
//     * Web service operation
//     */

    @WebMethod(operationName = "mostrarUsuarios")
    public UsuarioClase[] mostrarUsuarios() {

        try {
            String sDriver = "org.apache.derby.jdbc.ClientDriver";
            String url = "jdbc:derby://localhost:1527/BDTrenes";

            Class.forName(sDriver).newInstance();
            Connection con = DriverManager.getConnection(url, "admin", "adminadmin");

            PreparedStatement stmt = con.prepareStatement("SELECT * FROM USUARIOS");
            ResultSet rs = stmt.executeQuery();

            stmt = con.prepareStatement("SELECT COUNT(*) FROM USUARIOS");
            ResultSet aux = stmt.executeQuery();
            aux.next();
            int num = aux.getInt(1);

            UsuarioClase[] usuarios = new UsuarioClase[num];

            int i = 0;
            while (rs.next() != false) {
                usuarios[i] = new UsuarioClase();
                usuarios[i].setDni(rs.getInt(1));
                usuarios[i].setNombre(rs.getString("NOMBRE"));
                usuarios[i].setApellidos(rs.getString("APELLIDOS"));
                usuarios[i].setDomicilio(rs.getString("DOMICILIO"));
                usuarios[i].setLocalidad(rs.getString("LOCALIDAD"));
                usuarios[i].setProvincia(rs.getString("PROVINCIA"));
                usuarios[i].setPais(rs.getString("PAIS"));
                usuarios[i].setTelefono(rs.getInt("TELEFONO"));
                usuarios[i].setCorreoe(rs.getString("CORREOE"));
                usuarios[i].setContrasena(rs.getString("CONTRASEÑA"));
                i++;

            }
            con.close();
            return usuarios;
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return null;
        }

    }
//
//    /**
//     * Web service operation
//     */

    @WebMethod(operationName = "borrarUsuario")
    public boolean borrarUsuario(@WebParam(name = "DNI") String DNI) {
        try {
            String sDriver = "org.apache.derby.jdbc.ClientDriver";
            String url = "jdbc:derby://localhost:1527/BDTrenes";

            Class.forName(sDriver).newInstance();
            Connection con = DriverManager.getConnection(url, "admin", "adminadmin");

            PreparedStatement stmt = con.prepareStatement("DELETE FROM RESERVAS WHERE DNI="+DNI);
            stmt.executeUpdate();

            stmt=con.prepareStatement("DELETE FROM USUARIOS WHERE DNI="+DNI);
            stmt.executeUpdate();
            con.close();
            return true;
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return false;
        }
    }
}
